﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PlanInterfejs;
using System.Data.Objects;

namespace PlanTestProject
{
    class TestDBGenerator
    {
        public plandbEncje db;
        void GenerateHours()
        {
            int ileLekcji = 7;

            //musze zrobic tak jak ponizej. wtf? nie ma metody w stylu "RemoveAll"!
            //coraz mniej mi sie L2E podoba.
            //DAL.database.ExecuteStoreCommand("DELETE FROM Godziny_Zajec", null);

            //a jednak nawet tak nie moge zrobic. dlaczego? bo potem "ObjectContext" jest
            //w "inconsistent state". co za lipa. dodalem stored procedure do bazy zeby ominac
            //ten problem:
            //DAL.database.DeleteAllGodzinyZajecImported(); // (:D)
            //DAL.database.SaveChanges();

            //fuck! dalej inconsistent state. trzeba widocznie zrobic tak:
            var res = from p in db.Godziny_Zajec select p;
            foreach (Godziny_Zajec gz in res)
            {
                db.DeleteObject(gz);
            }
            db.SaveChanges();
            //no i teraz dziala. co prawda to rozwiazanie jest idiotyczne, bo najpierw musze... pobrac
            //z bazy cala tabele, zanim usune wszystkie wiersze. nastepnie wiersze usuwane sa po kolei.
            //l2e ssie po calosci.


            for (int i = 1; i <= ileLekcji; i++)
            {
                db.Godziny_Zajec.AddObject(Godziny_Zajec.CreateGodziny_Zajec(i, TimeSpan.FromHours(i+8),
                     TimeSpan.FromHours(i+1+8)));
            }

            db.SaveChanges();
        }

        public plandbEncje GenerateDB()
        {
            db = new plandbEncje("name=plandbEncjeTest");
            GenerateHours();

            db.ExecuteStoreCommand("DELETE FROM Wymagane_Przedmioty;");
            db.ExecuteStoreCommand("DELETE FROM Nauczane_Przedmioty;");
            db.ExecuteStoreCommand("DELETE FROM Sala;");
            db.ExecuteStoreCommand("DELETE FROM Grupa;");
            db.ExecuteStoreCommand("DELETE FROM Przedmiot_Typy;");
            db.ExecuteStoreCommand("DELETE FROM Nauczyciel;");

            db.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
            //sale
            db.Sala.AddObject(new Sala
            {
                Numer = "1",
                ID_Sala = 1
            });
            db.Sala.AddObject(new Sala
            {
                Numer = "2",
                ID_Sala = 2
            });
            db.Sala.AddObject(new Sala
            {
                Numer = "3",
                ID_Sala = 3
            });
            db.Sala.AddObject(new Sala
            {
                Numer = "4",
                ID_Sala = 4
            });

            //przedmioty
            Przedmiot_Typy pol, mat, ang;
            db.Przedmiot_Typy.AddObject(pol = new Przedmiot_Typy
            {
                ID_Przedmiot_Typy = 1,
                Nazwa = "pol"
            });
            db.Przedmiot_Typy.AddObject(mat = new Przedmiot_Typy
            {
                ID_Przedmiot_Typy = 2,
                Nazwa = "mat"
            });
            db.Przedmiot_Typy.AddObject(ang = new Przedmiot_Typy
            {
                ID_Przedmiot_Typy = 3,
                Nazwa = "ang"
            });

            db.Wymagane_Przedmioty.AddObject(new Wymagane_Przedmioty
            {
                ID_Wymagane_Przedmioty = 1,
                Poziom_Grupy = 1,
                Przedmiot_Typy = mat,
                Ilosc = 3
            });
            db.Wymagane_Przedmioty.AddObject(new Wymagane_Przedmioty
            {
                ID_Wymagane_Przedmioty = 2,
                Poziom_Grupy = 1,
                Przedmiot_Typy = ang,
                Ilosc = 6
            });
            db.Wymagane_Przedmioty.AddObject(new Wymagane_Przedmioty
            {
                ID_Wymagane_Przedmioty = 3,
                Poziom_Grupy = 1,
                Przedmiot_Typy = pol,
                Ilosc = 2
            }); 

            // nauczyciele
            Nauczyciel nmat, npol, nang, nuni;
            db.Nauczyciel.AddObject(nmat = new Nauczyciel
            {
                ID_Nauczyciel = 1,
                Imie = "Mate",
                Nazwisko = "matyk"
            });
            db.Nauczyciel.AddObject(npol = new Nauczyciel
            {
                ID_Nauczyciel = 2,
                Imie = "Pol",
                Nazwisko = "ak"
            });
            db.Nauczyciel.AddObject(nang = new Nauczyciel
            {
                ID_Nauczyciel = 3,
                Imie = "Ang",
                Nazwisko = "lik"
            });
            db.Nauczyciel.AddObject(nuni = new Nauczyciel
            {
                ID_Nauczyciel = 4,
                Imie = "Uni",
                Nazwisko = "wer"
            });
            //grupy
            Grupa a, b, c;
            db.Grupa.AddObject(a = new Grupa
            {
                ID_Grupa = 1,
                Poziom_grupy = 1,
                Nazwa = "a",
                ID_Nauczyciel=1
            });
            db.Grupa.AddObject(b = new Grupa
            {
                ID_Grupa = 2,
                Poziom_grupy = 1,
                Nazwa = "b",
                ID_Nauczyciel = 2
            });
            db.Grupa.AddObject(c = new Grupa
            {
                ID_Grupa = 3,
                Poziom_grupy = 1,
                Nazwa = "c",
                ID_Nauczyciel = 3
            });


            nmat.Nauczane_Przedmioty.Add(new Nauczane_Przedmioty
            {
                Nauczyciel = nmat,
                Przedmiot_Typy = mat
            });
            nang.Nauczane_Przedmioty.Add(new Nauczane_Przedmioty
            {
                Nauczyciel = nang,
                Przedmiot_Typy = ang
            });
            npol.Nauczane_Przedmioty.Add(new Nauczane_Przedmioty
            {
                Nauczyciel = npol,
                Przedmiot_Typy = pol
            });
            nuni.Nauczane_Przedmioty.Add(new Nauczane_Przedmioty
            {
                Nauczyciel = nuni,
                Przedmiot_Typy = pol
            });
            nuni.Nauczane_Przedmioty.Add(new Nauczane_Przedmioty
            {
                Nauczyciel = nuni,
                Przedmiot_Typy = mat
            }); 
            nuni.Nauczane_Przedmioty.Add(new Nauczane_Przedmioty
            {
                Nauczyciel = nuni,
                Przedmiot_Typy = ang
            });
            
            db.SaveChanges();
            return db;
        }

    }
}
